package com.agilya.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.agilya.dao.DAOApprenant;
import com.agilya.dao.DAOSachant;
import com.agilya.dao.daointerface.ApprenantDAO;
import com.agilya.dao.daointerface.SachantDAO;
import com.agilya.dao.exception.DAOExceptions;
import com.agilya.modele.Apprenant;
import com.agilya.modele.Sachant;

/**
 * Servlet implementation class LoginSachant
 * 
 * permets à un sachant de se connecter.
 * 
 * 
 * */
@WebServlet("/Login")
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;
	@Inject
	@DAOApprenant
	private ApprenantDAO apprenantdao;

	@Inject
	@DAOSachant
	private SachantDAO sachantdao;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public Login() {
		super();
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// get session
		HttpSession session = request.getSession();
		RequestDispatcher rd = null;
		Sachant sachant = (Sachant) session.getAttribute("sachantSession");
		if (sachant != null) {
			// un sachant est déjà en session
			rd = request.getRequestDispatcher("/AfficherQCM");
		} else {
			// on envoie vers la page de login
			rd = request.getRequestDispatcher("/login.jsp");
		}

		rd.forward(request, response);

		Apprenant apprenant = (Apprenant) session.getAttribute("apprenantSession");
		if (apprenant != null) {
			// un apprenant est déjà en session
			rd = request.getRequestDispatcher("/AfficherQCM");
		} else {
			// on envoie vers la page de login
			rd = request.getRequestDispatcher("/login.jsp");
		}

		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		RequestDispatcher rd = null;
		HttpSession session = request.getSession();

		// creer une liste pour les erreurs
		List<String> erreurs = new ArrayList<>();

		String email = request.getParameter("email").trim();
		String motdepasse = request.getParameter("motdepasse").trim();

		try {
			// verification si un sachant existe
			if (sachantdao.verifLogin(email, motdepasse)) {
				session.setAttribute("sachantSession", sachantdao.getSachantByEmail(email));
				rd = request.getRequestDispatcher("/AfficherQCM");
			} else if (apprenantdao.verifLoginApprenant(email, motdepasse)) {
				session.setAttribute("apprenantSession", apprenantdao.getApprenantByEmail(email));
				rd = request.getRequestDispatcher("/AfficherQCM");
			} else {

				// Affichage erreur dans le cas de login ou mot de passe incorrect
				erreurs.add("Login ou mot de passe incorrect");

				rd = request.getRequestDispatcher("/login.jsp");
			}
		} catch (DAOExceptions e) {
			// Affichange erreur si impossible de se connecter à la base de donnée
			erreurs.add("Impossible de pouvoir se connecter à la base de données");
			rd = request.getRequestDispatcher("/login.jsp");
		}

		request.setAttribute("erreurs", erreurs);
		rd.forward(request, response);

	}
}
